unit OdczytZapis;


interface

uses Narzedzia, ListaUczniow, ListaUwag, ListaPrzedmiotow, ListaOcen;

procedure zapisz(p:wuczen; sciezka:string);
procedure wczytaj(var p:wuczen; sciezka:string);

implementation

{---------------------------------}
{ operacje na plikach             }
{---------------------------------}

{ procedura zapisuje do pliku binarego cala liste uczniow z wszystkimi informacjami}
procedure zapisz(p:wuczen; sciezka:string);
var
  F: File;
  i,j,k:integer;

  ptrUwagi : wuwagi;
  ptrPrzedmioty : wprzedmioty;
  ptrOceny : woceny;

begin
   {$I-}
   assign(F, sciezka);
   rewrite(F,1);
   {$I+}
   if IOResult = 0 then begin
        { Zapisujmey uczniow }
       while( p <> nil) do begin
        BlockWrite(F, p^.info.imie, sizeof(p^.info.imie));
        BlockWrite(F, p^.info.nazwisko, sizeof(p^.info.nazwisko));

       {zapisujemy ich uwagi}
       i := licz_uwagi(p^.uwagi);
       BlockWrite(F, i, sizeof(i));
       ptrUwagi := p^.uwagi;

       while(ptrUwagi <> nil) do begin
               BlockWrite(F, ptrUwagi^.tekst, sizeof(ptrUwagi^.tekst));
               ptrUwagi := ptrUwagi^.nastepna_uwaga;
       end; {// Koniec zapisywania uwag // }

       {zapisujemy przedmioty }
       j := licz_przedmioty(p^.przedmioty);
       BlockWrite(F, j, sizeof(j));
       ptrPrzedmioty := p^.przedmioty;

       while(ptrPrzedmioty <> nil) do begin
           BlockWrite(F, ptrPrzedmioty^.nazwa, sizeof(ptrPrzedmioty^.nazwa));

               {Kazdy przedmiot ma swoja ocene/y - zapiszmy ją }
               k :=  licz_oceny(ptrPrzedmioty^.oceny);
               BlockWrite(F, k, sizeof(k));
               ptrOceny := ptrPrzedmioty^.oceny;

               while(ptrOceny <> nil) do begin
                  BlockWrite(F, ptrOceny^.nota, sizeof(ptrOceny^.nota));
                  ptrOceny := ptrOceny^.nastepna_ocena;
               end;  {// Koniec zapisywania ocen //}

          ptrPrzedmioty := ptrPrzedmioty^.nastepny_przedmiot;
       end;  {// Koniec zapisywania przemiotow //}

    p := p^.nastepny_uczen;
    end;   {// Koniec zapisywania uczniow // }
  close(F);
  end;
end;

{ procedura robi dokladnie na odwrot to co procedura zapisz }
procedure wczytaj(var p:wuczen; sciezka:string);
  var
     F: File;
     ptrUczen : wuczen;
     nazwa_przedmiotu : string[32];
     uczen_info : personal;
     uwaga : string[255];

     i,j,k,ilosc_przedmiotow,ilosc_ocen, ilosc_uwag, numer_tmp,nota :integer;

 begin
  {$I-}
  Assign(F, sciezka);
  Reset(F,1);
  {$I+}
  if IOResult = 0 then begin
     i:=0;
     while not eof(F) do begin
        { czytamy dane ucznia i dodajemy ucznia}
        BlockRead(F, uczen_info.imie, sizeof(uczen_info.imie));
        BlockRead(F, uczen_info.nazwisko, sizeof(uczen_info.nazwisko));

        dodaj_ucznia(p, uczen_info);
        { nasz aktualny uczen to po prostu head }
        ptrUczen := p;

        BlockRead(F, ilosc_uwag, sizeof(ilosc_uwag));

        { dodajemy uwagi }
        for i:=1 to ilosc_uwag do begin
              BlockRead(F, uwaga, sizeof(uwaga));
              dodaj_uwage(ptrUczen^.uwagi, uwaga);
        end;

       { dodajemy przedmioty }
       BlockRead(F, ilosc_przedmiotow, sizeof(ilosc_przedmiotow));
       for j:=1 to ilosc_przedmiotow do begin
             BlockRead(F, nazwa_przedmiotu , sizeof(nazwa_przedmiotu));
             dodaj_przedmiot(ptrUczen^.przedmioty, nazwa_przedmiotu);

             { dodajemy oceny }
             BlockRead(F, ilosc_ocen, sizeof(ilosc_ocen));
             for k:=1 to ilosc_ocen do begin
                  BlockRead(F, nota , sizeof(nota));
                  dodaj_ocene(ptrUczen^.przedmioty^.oceny, nota);
             end;
       end;
     end;
 end;
 Close(F)
end;


end.

